package com.sjh;

/**
 * @author jack
 * @data 2020/8/22 1:14 下午
 */
public class MultiThreadShareData {

    public static void main(String[] args) {
        ShareData shareData = new ShareData();
        //设计4个线程，其中两个线程每次对j增加1，另外两个线程对j每次减少1,写出程序。
        /*
        实现方式2 将这些Runnable独享作为某一个类的内部类，共享数据作为这个外部类中的成员变量
        ，每个线程对共享数据的操作方法也分配给外部类，以便实现对共享数据进行各个操作的互斥合通信
        ，作为内部类的各个Runnable 对象调用外部类的这些方法。

         */
        for (int i = 0; i < 2; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    shareData.increment();
                }
            }).start();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    shareData.decrement();
                }
            }).start();
        }
    }
    static class ShareData{
        int j = 100;
        public synchronized void increment() {
            j++;
            System.out.println(j);
        }
        public synchronized void decrement() {
            j--;
            System.out.println(j);
        }
    }

}